﻿#region << 版 本 注 释 >>
/*----------------------------------------------------------------
// Copyright (C) 2021 kingerrobot
// 版权所有。 
//
// 文件名：EnumExtension
// 文件功能描述：
//
// 创建者：名字 (zzl)
// 时间：2021/12/8 13:40:23
//
// 修改人：
// 时间：
// 修改说明：
// 版本：V1.0.0
//----------------------------------------------------------------*/
#endregion
using System.Collections.Specialized;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Reflection;

namespace KingerRobot.MexicoSailunWMS.SpiService;

internal static class EnumExtension
{
    /// <summary>
    /// 获取枚举的显示名字
    /// </summary>
    /// <param name="en"> </param>
    /// <returns> </returns>
    public static string GetDisplayName(this System.Enum en)
    {
        var type = en.GetType();
        var memInfo = type.GetMember(en.ToString());
        if (memInfo != null && memInfo.Length > 0)
        {
            var attrs = memInfo[0].GetCustomAttributes(typeof(DisplayAttribute), true);
            if (attrs != null && attrs.Length > 0)
            {
                return ((DisplayAttribute)attrs[0]).Name;
            }
        }
        return en.ToString();
    }
    public static string GetDescription(this Enum value)
    {
        var type = value.GetType();
        var name = Enum.GetName(type, value);
        if (string.IsNullOrWhiteSpace(name))
            return value.ToString();

        var field = type.GetField(name);
        var des = field?.GetCustomAttribute<DescriptionAttribute>();
        if (des == null)
            return value.ToString();

        return des.Description;
    }
        /// <summary>
        /// 根据枚举类型得到其所有的 值 与 枚举定义Description属性 的集合
        /// </summary>
        /// <param name="enumType"></param>
        /// <returns></returns>
        public static NameValueCollection GetNVCFromEnumValue(Type enumType)
    {
        NameValueCollection nvc = new NameValueCollection();
        Type typeDescription = typeof(DescriptionAttribute);
        System.Reflection.FieldInfo[] fields = enumType.GetFields();
        string strText = string.Empty;
        string strValue = string.Empty;
        foreach (FieldInfo field in fields)
        {
            if (field.FieldType.IsEnum)
            {
                strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString();
                object[] arr = field.GetCustomAttributes(typeDescription, true);
                if (arr.Length > 0)
                {
                    DescriptionAttribute aa = (DescriptionAttribute)arr[0];
                    strText = aa.Description;
                }
                else
                {
                    strText = "";
                }
                nvc.Add(strValue, strText);
            }
        }
        return nvc;
    }
}
